import * as actionTypes  from './constants';

//  这里把发送请求的方法引入过来
import { 
    getTopBanners,
    getHotRecommends,
    getNewAlbums,
    getTopList
 } from 'network/recommend';

//  export const subAction = num => ({
//     type: SUB_NUMBER,
//     num
//   });
// dispatch()  里可以传入一个函数 
// dispatch 他本身就是触发
//  通过调用getTopBannerAction这个函数 给他返回dispatch 这个函数
// 这里是把数据放到 reducer里的
// dispatch(getTopBannerAction())
const changeTopVannerAction = (res)=>({
    type:actionTypes.CHANGE_TOP_BANNERS,
    topBanners:res.banners
})
const changeHotRecommendsAction = (res) =>({
    type:actionTypes.CHANGE_HOT_RECOMMENDS,
    hotRecommends:res.result
})
const changeNewAlbumAction = (res) =>({
    type:actionTypes.CHANGE_NEW_ALBUM,
    newAlbums:res.albums
})

const changeUpRankingAction = (res) => ({
    type: actionTypes.CHANGE_UP_RANKING,
    upRanking: res.playlist
  })
const changeNewRankingAction = (res) => ({
    type: actionTypes.CHANGE_NEW_RANKING,
    newRanking: res.playlist
  })
const changeOriginRankingAction = (res) => ({
    type: actionTypes.CHANGE_ORIGIN_RANKING,
    originRanking: res.playlist
  })
// 这个导出的getTopBannerAction 是要放到reducer里的 
//  这里面getTopBannerAction 是封装请求方法的 处理数据请求过来 的一个步骤
//  但是这个步骤是没有执行的 他主要的功能是把数据处理的步骤 发给了 dispatch 这个触发方法
// 这里就是 action 里 的异步请求数据
export const getTopBannerAction = ()=>{
    return dispatch =>{
        // 这里开始发送网路请求
        getTopBanners().then( res=>{
            // console.log(res);
            // 这里是派发事件 把action 派发出去
            dispatch(changeTopVannerAction(res));
        })
    }
};

export const getHotRecommendsAction = (limit) => {
    return dispatch => {
        getHotRecommends(limit).then( res => {
            // console.log(res);
            dispatch(changeHotRecommendsAction(res));
        })
    }
};

export const getNewAlbumAction = (limit) => {
    return dispatch => {
        getNewAlbums(limit).then( res => {
            // console.log(res);
            dispatch(changeNewAlbumAction(res));
        })
    }
};

export const getTopListAction = (idx) => {
    return dispatch => {
      getTopList(idx).then(res => {
        switch (idx) {
          case 0:
            dispatch(changeUpRankingAction(res));
            break;
          case 2:
            dispatch(changeNewRankingAction(res));
            break;
          case 3:
            dispatch(changeOriginRankingAction(res));
            break;
          default:
        }
      });
    }
  }